部分型 (subtype)
型Sの任意の項が、型Tの項が期待されている文脈で安全に使用可能であることを、SはTの部分型であるという
この時、S <: Tと書く
例
code:ts
const x = { x: 1, y: 'hoge' };
const f = (arg: { x: number }) => {
return arg.x;
};
f(x);
これはTypeScriptに慣れていたら当たり前に見えるが、
もっと融通の効かない型システムだと、{x:number,y:string}と{x:number}は別の型だ!エラーにする!となる
しかし、実際はこの操作は常に安全であるし、それも引数の型情報のみで判断できる
つまり、関数のbodyを見なくても安全であると判断できる
そこで、この融通を効かせるために、部分型のようなものが要請される
Record型における部分型
例えば以下のような2つの型があるとき
code:ts
type S = {
foo: string;
bar: number;
}
type T = {
foo: string;
}
S <: Tという関係である
つまり、SはTの部分型である
つまり、Sは常にTに置き換え可能である
propertyの数が大きければ大きいほど、その集合に属する値の数が減る
Aは、A | Bの部分型で、A & BはAの部分型というのが非直感的でおもしろいmrsekut.icon
つまり、A & B <: A <: A | Bとなる
関連
参考